package com.taobao.android.mnndemo;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.widget.ImageView;

public class SkeletonImageView extends ImageView {

    private float[][] keypoints; // 二维数组，存储每个关键点的 [x, y] 坐标
    private Paint paint;

    public SkeletonImageView(Context context) {
        super(context);
        init();
    }

    public SkeletonImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    private void init() {
        // 初始化画笔
        paint = new Paint();
        paint.setColor(Color.RED); // 设置关键点颜色
        paint.setStrokeWidth(10); // 设置关键点的大小
        paint.setStyle(Paint.Style.FILL);

        // 初始化连线的画笔
        paint.setAntiAlias(true);
    }

    // 设置关键点数据并请求重绘
    public void setKeypoints(float[][] keypoints) {
        this.keypoints = keypoints;
        invalidate(); // 请求重新绘制视图
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        if (keypoints == null) {
            return; // 如果没有关键点数据，则不绘制
        }

        // 获取ImageView的宽度和高度
        int width = getWidth();
        int height = getHeight();

        // 绘制关键点
        for (float[] keypoint : keypoints) {
            float x = keypoint[0] * width; // 将归一化的 x 坐标转换为像素坐标
            float y = keypoint[1] * height; // 将归一化的 y 坐标转换为像素坐标
            canvas.drawCircle(x, y, 8, paint); // 绘制关键点
        }

        // 可选：绘制关键点之间的连线（例如连接关节以形成骨架）
        paint.setStrokeWidth(5); // 设置连线的粗细
        paint.setColor(Color.GREEN); // 设置连线的颜色

        // 假设我们要绘制的骨架是从 keypoint 0 到 keypoint 1 再到 keypoint 2
        if (keypoints.length >= 3) {
            canvas.drawLine(keypoints[0][0] * width, keypoints[0][1] * height,
                            keypoints[1][0] * width, keypoints[1][1] * height, paint);

            canvas.drawLine(keypoints[1][0] * width, keypoints[1][1] * height,
                            keypoints[2][0] * width, keypoints[2][1] * height, paint);
        }

        // 根据需要添加更多的连线绘制
    }
}